專業(yè)智能顯示方案提供商
OEM產(chǎn)品
OEM產(chǎn)品
行業(yè)定制
新聞資訊
+86 13923405632
Linux系統(tǒng)安全加固:防火墻、SELinux、用戶權(quán)限與入侵檢測配置
04-22 / 2026 96

“我裝了防火墻,密碼也設(shè)得很復(fù)雜,怎么還是被入侵了?”——這是很多運維人員的困惑。實際上,Linux系統(tǒng)的安全是“縱深防御”,僅靠一個密碼或一道防火墻遠遠不夠。一個合格的生產(chǎn)環(huán)境,至少需要做到:網(wǎng)絡(luò)層過濾(防火墻)、進程層強制訪問控制(SELinux)、用戶層最小權(quán)限(sudo)、文件層完整性校驗(AIDE)、行為層審計(auditd)和攻擊層阻斷(Fail2ban)。

以RHEL 9.4、Rocky Linux 9和AlmaLinux 9等2026年主流企業(yè)級發(fā)行版為例,從實戰(zhàn)角度講解如何一步步加固Linux系統(tǒng)。所有命令均在生產(chǎn)環(huán)境驗證,建議按順序執(zhí)行。

一、防火墻(firewalld)

為什么不用iptables而用firewalld?

firewalld是RHEL 7+默認(rèn)的動態(tài)防火墻管理器,支持運行時區(qū)和規(guī)則的動態(tài)修改,無需重啟服務(wù),且規(guī)則持久化。它比iptables更適合生產(chǎn)環(huán)境。

基礎(chǔ)配置

首先確認(rèn)firewalld已安裝并啟動:

bash

systemctl enable firewalld --now
systemctl status firewalld

查看當(dāng)前默認(rèn)區(qū)域(通常是public):

bash

firewall-cmd --get-default-zone

實戰(zhàn)原則:默認(rèn)拒絕一切,按需開放端口。

bash

# 設(shè)置默認(rèn)區(qū)域為public,并禁止所有入站流量(保留ssh已允許)
firewall-cmd --set-default-zone=public
firewall-cmd --zone=public --remove-service=ssh   # 先移除默認(rèn)允許的ssh,后面再單獨加

開放必要服務(wù)端口

bash

# 允許SSH(建議更改端口號前先允許新端口)
firewall-cmd --zone=public --add-port=22/tcp --permanent
# 允許HTTP/HTTPS
firewall-cmd --zone=public --add-service=http --add-service=https --permanent
# 如果運行了數(shù)據(jù)庫(如MySQL,建議只允許內(nèi)網(wǎng)訪問,此處示例僅允許特定IP)
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="3306" accept' --permanent

重要:永遠不要直接開放數(shù)據(jù)庫端口到公網(wǎng)。

限制SSH來源IP(防暴力破解)

bash

# 僅允許公司IP段訪問22端口
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="203.0.113.0/24" port protocol="tcp" port="22" accept' --permanent

防掃描與攻擊(使用firewalld的direct規(guī)則或配合fail2ban)

bash

# 限制單個IP的連接數(shù)(防止DoS,需使用direct接口)
firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -m state --state NEW -m recent --set
firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP

重載使生效

bash

firewall-cmd --reload

查看當(dāng)前規(guī)則:

bash

firewall-cmd --list-all

二、SELinux

很多管理員一見到SELinux就“setenforce 0”關(guān)掉,這是極大的安全隱患。SELinux(Security-Enhanced Linux)是內(nèi)核級強制訪問控制,即使進程以root運行,也無法違反策略。生產(chǎn)環(huán)境建議保持Enforcing模式。

檢查狀態(tài)并切換

bash

getenforce   # 顯示Enforcing、Permissive或Disabled

若當(dāng)前為Permissive(只記錄不阻斷),改為Enforcing:

bash

setenforce 1
sed -i 's/^SELINUX=.*/SELINUX=enforcing/' /etc/selinux/config

常見服務(wù)自定義策略(以Nginx為例)

假設(shè)Nginx需要綁定非標(biāo)準(zhǔn)端口(如8080),SELinux會阻止。解決方法:

bash

# 查看SELinux允許的http端口
semanage port -l | grep http
# 添加8080到http_port_t
semanage port -a -t http_port_t -p tcp 8080

文件上下文錯誤修復(fù)

當(dāng)移動網(wǎng)站目錄后,Nginx可能因SELinux無法讀取文件?;謴?fù)上下文:

bash

restorecon -Rv /var/www/html/

若需永久修改上下文:

bash

semanage fcontext -a -t httpd_sys_content_t "/newpath(/.*)?"
restorecon -Rv /newpath

布爾值開關(guān)

某些服務(wù)需要特定布爾值,比如httpd允許訪問網(wǎng)絡(luò):

bash

setsebool -P httpd_can_network_connect on

排錯利器:audit2why

當(dāng)服務(wù)被SELinux阻斷時,查看/var/log/audit/audit.log,使用:

bash

audit2why < /var/log/audit/audit.log

它會給出友好的解決方案建議。

三、用戶權(quán)限

禁止root直接登錄

bash

# 創(chuàng)建普通用戶并設(shè)置密碼
useradd deploy
passwd deploy

# 禁止root SSH登錄
echo "PermitRootLogin no" >> /etc/ssh/sshd_config
systemctl restart sshd

sudo權(quán)限精細化

原則:用戶只能執(zhí)行必要的命令,而不是ALL。

編輯/etc/sudoers(使用visudo):

bash

visudo

示例:允許deploy用戶重啟nginx和查看日志,但不能做其他操作:

text

deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx, /usr/bin/journalctl -u nginx -n 50

鎖定不必要的系統(tǒng)賬戶

bash

passwd -l games
passwd -l nobody  # 注意:某些服務(wù)依賴nobody,謹(jǐn)慎鎖定

SSH密鑰認(rèn)證與禁用密碼

bash

# 生成密鑰對(客戶端)
ssh-keygen -t ed25519 -C "deploy@your-server"
# 將公鑰上傳到服務(wù)器
ssh-copy-id -i ~/.ssh/id_ed25519.pub deploy@server_ip

# 服務(wù)器上禁用密碼登錄
echo "PasswordAuthentication no" >> /etc/ssh/sshd_config
systemctl restart sshd

四、文件完整性校驗:AIDE

AIDE(Advanced Intrusion Detection Environment)創(chuàng)建系統(tǒng)文件數(shù)據(jù)庫,定期對比發(fā)現(xiàn)被篡改的文件。

安裝與初始化

bash

dnf install aide -y

編輯配置/etc/aide.conf,選擇需要監(jiān)控的目錄(默認(rèn)已包含/bin, /sbin, /etc等關(guān)鍵路徑)。

初始化數(shù)據(jù)庫:

bash

aide --init
mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz

定期檢查(每日cron)

bash

cat > /etc/cron.daily/aide-check <<EOF
#!/bin/bash
aide --check | mail -s "AIDE Daily Report" admin@yourdomain.com
EOF
chmod +x /etc/cron.daily/aide-check

若有文件被篡改,報告中會顯示“changed”。結(jié)合auditd日志進一步調(diào)查。

五、審計日志:auditd

auditd可記錄系統(tǒng)調(diào)用、文件訪問、用戶操作等,用于事后溯源和實時告警。

安裝與啟動

bash

dnf install audit -y
systemctl enable auditd --now

常用審計規(guī)則

編輯/etc/audit/rules.d/audit.rules

bash

# 監(jiān)控/etc/passwd和/etc/shadow的修改
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity

# 監(jiān)控sudo執(zhí)行
-w /usr/bin/sudo -p x -k sudo_exec

# 監(jiān)控SSH配置文件
-w /etc/ssh/sshd_config -p wa -k sshd_config

# 記錄所有對/var/www/html的寫操作
-w /var/www/html -p wa -k web_content

加載規(guī)則:

bash

augenrules --load
systemctl restart auditd

查詢?nèi)罩?/h3>

bash

# 查看所有與identity標(biāo)簽相關(guān)的記錄
ausearch -k identity

# 查看今天所有失敗的登錄嘗試
ausearch -m USER_LOGIN -sv no

實時監(jiān)控告警(搭配swatch)

可安裝swatch或自寫腳本監(jiān)控audit.log并發(fā)送郵件。

六、防暴力破解:Fail2ban

Fail2ban掃描日志文件,對多次失敗的IP進行動態(tài)封禁(通過防火墻或iptables)。

安裝與配置

bash

dnf install epel-release -y
dnf install fail2ban -y

創(chuàng)建本地配置文件/etc/fail2ban/jail.local

ini

[DEFAULT]
bantime = 3600          # 封禁1小時
findtime = 600          # 10分鐘內(nèi)
maxretry = 5            # 失敗5次觸發(fā)

[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = systemd

若SSH更改了端口,修改port值。

啟動并設(shè)置開機自啟

bash

systemctl enable fail2ban --now

查看封禁狀態(tài)

bash

fail2ban-client status sshd

6.4 解封IP

bash

fail2ban-client set sshd unbanip 192.168.1.100

七、綜合安全策略:每日巡檢腳本

將以上檢查項整合為每日巡檢腳本,輸出報告:

bash

#!/bin/bash
echo "=== Firewall Rules ==="
firewall-cmd --list-all
echo -e "\\n=== SELinux Status ==="
getenforce
echo -e "\\n=== Failed SSH Attempts (last 24h) ==="
journalctl _SYSTEMD_UNIT=sshd.service --since "24 hours ago" | grep "Failed password" | wc -l
echo -e "\\n=== AIDE Check (last run) ==="
tail -1 /var/log/aide/aide.log
echo -e "\\n=== Auditd Recent Events ==="
ausearch -ts today | head -20

將此腳本加入cron,每天發(fā)送給管理員。

Linux安全加固不是一次性的工作,而是持續(xù)的過程。記?。?strong>沒有絕對的安全,只有相對的安全。保持警惕,持續(xù)改進。


現(xiàn)在聯(lián)系華一,立即提升您的產(chǎn)品核心競爭力
友情鏈接:
關(guān)于我們
網(wǎng)站地圖
全國咨詢熱線

手機: +86 13923405632

?2018 深圳華一精品科技有限公司 版權(quán)所有 粵ICP備20069397號